// 引入服务器模块
const http = require("http");

// 引入文件模块
const fs = require("fs");

// 引入工具模块
const url = require("url");
const qs = require("querystring");
// 设定路由规则
    // 数据请求：http://localhost:3000/api
    // 静态资源请求：http://localhost:3000/

    // 创建服务器
    http.createServer((req, res)=>{
        // 路由判断
        if(req.url.includes("/api")){
            dataHandle(req, res);
        }else{
            staticHandle(req, res);
        }
    // 挂载到指定端口
    }).listen(3000,()=>{
        console.log("服务器开启成功: http://localhost:3000")
    })

    function dataHandle(req, res){
        // 解析get数据
        // 在地址后拼接，利用工具模块url解析地址后的数据
        if(req.method === "GET"){
            const obj = url.parse(req.url, true).query;
            fn(req, res, obj);
        // 解析post数据
        // 通过data事件配合end事件获取post携带的数据
        // 解析数据成对象
        }else if(req.method === "POST"){
            // post数据非拼接在地址后，只能通过事件获取
            let str = "";
            // 绑定事件：req.on(事件类型，事件处理函数)
            req.on("data",(d)=>{
                str += d;
            })
            req.on("end", ()=>{
                const obj = qs.parse(str);
                // 获取到（不分get或post）数据
                // 在根据数据中隐藏的信息，决定执行不同的功能（登录，注册等等等等...）
                fn(req, res, obj);
            })
        }
    }

    function staticHandle(req, res){
        // 静态资源请求
        // 利用文件模块读文件，将读取到的文件响应给前端
        fs.readFile("./www" + url.parse(req.url).pathname, (err, data)=>{
            if(err){
                res.write("404");
            }else{
                res.write(data);
            }
            res.end();
        })
    }
    
    function fn(req, res, data){
        // 此处可以拿到前端请求时携带的数据
        console.log(data);
        // 之后就可以开始具体的功能处理
        res.end();
    }